package com.nari.sink.service;

import java.io.File;
import java.util.List;
import java.util.Map;

import com.nari.coreframe.service.IGenericService;
import com.nari.platform.model.PageCond;
import com.nari.platform.model.ResponseMsg;
import com.nari.platform.model.ResultWithPageCond;
import com.nari.sink.bo.PSinkInfo;

public interface ISinkBiz extends IGenericService<PSinkInfo, String> {

	/**
	 * 分页查询散热器列表
	 * @param sinkNo 散热器编号(可选)
	 * @param projectUID 所属项目(可选)
	 * @param communityUID 所属小区(可选)
	 * @param buildingUID 所属楼栋(可选)
	 * @param roomUID 所属热用户(可选)
	 * @param pageCond
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-8-28
	 */
	public ResultWithPageCond<PSinkInfo> queryHeatSinkPage(String sinkNo,
			String projectUID, String communityUID, String buildingUID, 
			String roomUID , PageCond pageCond) throws Exception;

	/**
	 * 通过所属关系（所属项目、所属小区、所属楼栋、所属热用户）查询散热器列表
	 * 若所属关系均不存在，则返回空列表
	 * @param projectUID 所属项目(可选)
	 * @param communityUID 所属小区(可选)
	 * @param buildingUID 所属楼栋(可选)
	 * @param roomUID 所属热用户(可选)
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-8-28
	 */
	public List<PSinkInfo> querySinkerListByBelongs(String projectUID, String communityUID, 
			String buildingUID, String roomUID) throws Exception;
	
	/**
	 * 带附件上传的楼栋信息保存及修改
	 * @param heatSinker 散热器信息实体
	 * @param attachFile 散热器附件
	 * @param fileName 附件文件名
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-8-28
	 */
	public ResponseMsg saveOrUpdateHeatSinker(PSinkInfo heatSinker, File attachFile, 
			String fileName) throws Exception;
	
	/**
	 * 删除散热器照片附件
	 * @param buildingUID
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-8-11
	 */
	public ResponseMsg deleteSinkerAttachFile(String heatSinkerUID) throws Exception;
	
	/**
	 * 通过散热器唯一标识删除散热器信息，并删除对应的散热器照片附件
	 * @param buildingUID
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-8-12
	 */
	public ResponseMsg deleteHeatSinkerByUID(String heatSinkerUID) throws Exception;
	
	/**
	 * 通过热用户散热器列表查询与其对应的热用户id-houseNo映射表
	 * @param heatSinkerList
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-8-19
	 */
	public Map<String, String> queryReferHeatRoomMap(List<PSinkInfo> heatSinkerList) throws Exception;
	
	/**
	 * 通过热用户散热器列表查询与其对应的小区id-communityName映射表
	 * @param heatSinkerList
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-8-20
	 */
	public Map<String, String> queryReferCommunityMap(List<PSinkInfo> heatSinkerList) throws Exception;
	
	/**
	 * 通过热用户散热器列表查询与其对应的楼栋id-buildingName映射表
	 * @param heatSinkerList
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-8-20
	 */
	public Map<String, String> queryReferBuildingMap(List<PSinkInfo> heatSinkerList) throws Exception;
	
	/**
	 * 根据所属关系查询可绑定分配表的散热器列表
	 * 散热器与分配表的绑定原则是一一对应
	 * @param projectUID 所属项目(可选)
	 * @param communityUID 所属小区(可选)
	 * @param buildingUID 所属楼栋(可选)
	 * @param roomUID 所属热用户(可选)
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-8-29
	 */
	public List<PSinkInfo> queryBindableSinkerByBelongs(String projectUID, String communityUID, 
			String buildingUID, String roomUID) throws Exception;
	
	/**
	 * 根据所属热用户信息查询散热器列表
	 * @param sinkNo 散热器编号(可选)
	 * @param projectUID 所属项目(可选)
	 * @param communityUID 所属小区(可选)
	 * @param buildingUID 所属楼栋(可选)
	 * @param heatRoomUID 所属热用户(必填)
	 * 说明：若热用户ID不存在，则返回零结果集
	 * @param pageCond
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-9-4
	 */
	public ResultWithPageCond<PSinkInfo> querySinkerPageByRoomUID(String sinkNo,
			String projectUID, String communityUID, String buildingUID, 
			String heatRoomUID , PageCond pageCond) throws Exception;
	
	/**
	 * 通过所属关系（所属项目、所属小区、所属楼栋、所属热用户）统计散热器的个数
	 * 若所属关系均不存在，则返回空列表
	 * @param projectUID 所属项目(可选)
	 * @param communityUID 所属小区(可选)
	 * @param buildingUID 所属楼栋(可选)
	 * @param roomUID 所属热用户(可选)
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-10-23
	 */
	public int countSinkerSumByBelongs(String projectUID, String communityUID, 
			String buildingUID, String roomUID) throws Exception;
	
	/**
	 * 统计相同散热器编号的数量，避免系统录入相同散热器编号的散热器信息
	 * @param sinkNo
	 * @param sinkerUID
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2014-7-28
	 */
	public int countBySinkNo(String sinkNo, String sinkerUID) throws Exception;
}
